package kr.hkit.powerjava.chapter11;

class Fly{
	String name;
	
	@Override
	public String toString() {
		return name;
	}
}

public class Car {
	int speed;
	int gear;
	public String color;
	
	public void speedUp(int increment) {
		speed += increment;
	}
	
	public void speedDown(int decrement) {
		speed -= decrement;
	}

	@Override //원래는 object에 정의된 함수인데, Car에서 오버라이딩. 재정의함.
	public String toString() {
		return String.format("Object[%s] -> Car [%s, %s, %s]",
				super.toString(), speed, gear,color); //이렇게 object에 있는 toString 강제 호출도 가능
	}
	
	public static void main(String[] args) {
		Car car = new Car();
		car.gear = 1;
		car.color = "red";
		car.speedUp(60);
		
		Car car2 = new Car();
		car2.gear = 3;
		car2.color = "blue";
		car2.speedUp(80);
		
		Fly fly = new Fly();
		fly.name = "fly01";
		
		Fly fly2 = new Fly();
		fly2.name = "fly02";
		
		Car[] arrCar = new Car[2];
		Fly[] arrFly = new Fly[2];
		
		arrCar[0] = car;
		arrCar[1] = car2; //배열이라서 객체생성해야함.
		
		arrFly[0] = fly;
		arrFly[1] = fly2;
		
		prnArr(arrCar);
		prnArr(arrFly);
		
		Object[] arrObj = new Object[4]; //Object로 이렇게 한번에 가능함. 부모기때문에
		arrObj[0] = car; //car클래스가 들어가있음
		arrObj[1] = car2;
		arrObj[2] = fly;
		arrObj[3] = fly2;
		
		prnArr(arrObj);
		
/*		System.out.println(car);
		
		Object obj = car; //부모기 때문에 가능함.
		System.out.println(obj.toString()); //object가 아니고 car의 투스트링이 호출됨
*/		 
//		Car car2 = new Object(); // 이건안됨. 자식은 부모를 받을 수 없음
		
		
		
	}

	private static void prnArr(Object[] arrObj) { //이거 하나로 다됨
		for (int i = 0; i < arrObj.length; i++) {
			System.out.println(arrObj[i]);
		}
		System.out.println();
	}

	private static void prnArr(Fly[] arrFly) { //Fly는 따로. 오버로딩
		for (int i = 0; i < arrFly.length; i++) {
			System.out.println(arrFly[i]);
		}
		System.out.println();
	}

	private static void prnArr(Car[] arrCar) { //Car배열 받고 있슴.
		for (int i = 0; i < arrCar.length; i++) {
			System.out.println(arrCar[i]);
		}
		System.out.println();
	}
}
